# # 变量
# # 所谓局部变量是定义在函数体内部的变量，即只在函数体内部⽣效。
# #     局部变量的作⽤：在函数体内部，临时保存数据，即当函数调⽤完成后，则销毁局部变量。
# # 所谓全局变量，指的是在函数体内、外都能⽣效的变量。
#
#
# # 修改局部变量为全局变量，需要使用【global 变量】，来进行声明
#
#
# # 1. 定义全局变量
# num = 0
# def test1():
#     global num
#     # 修改全局变量
#     num = 100
# def test2():
#     # 调⽤test1函数中修改后的全局变量
#     print(num)
# # 2. 调⽤test1函数，执⾏函数内部代码：声明和修改全局变量
# test1()
# # 3. 调⽤test2函数，执⾏函数内部代码：打印
# test2()
#
#
# # 函数的返回值
# # 1，return a, b 写法，返回多个数据的时候，默认是元组类型。
# # 2. return后⾯可以连接列表、元组或字典，以返回多个值。
# def num():
#     return 1, 2
# result = num()
# print(result)


# # 函数的参数
# # 位置参数：调⽤函数时根据函数定义的参数位置来传递参数。传递和定义参数的顺序及个数必须⼀致。
# def user(name, age, gender):
#     print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
# user('TOM', 20, '男')
#
# # 关键字参数：通过“键=值”形式加以指定，没有参数之间的位置区别
# user(name='Rose', age=20, gender='⼥')
#
# # 缺省参数：默认参数，⽤于定义函数，为参数提供默认值
# def user_info(name, age, gender='男'):#书写的时候就已经定义了参数值，如果调用布传入参数则是这个默认值
#     print(f'您的名字是{name}, 年龄是{age},性别是{gender}')
# user_info('TOM', 20)

# 传入参数顺序：位置参数 > 关键字参数 > 缺省参数

# # 不定长参数
# # 不定⻓参数也叫可变参数。⽤于不确定调⽤的时候会传递多少个参数
# def user_info(*args):#包裹位置传输（元组使用）
#     print(args)
# user_info('TOM') # ('TOM',)
# user_info('TOM', 18) # ('TOM', 18)
# list1 = [1,2,3] #提前定义列表
# user_info(*list1) #传入的时候必须带*
# # 传进的所有参数都会被args变量收集，它会根据传进参数的位置合并为⼀个元组(tuple)，args是元组类型，这就是包裹位置传递
#
# def user_info(**kwargs):#包裹关键字传输（字典使用）
#     print(kwargs)
# user_info(name='TOM', age=18, id=110) # {'name': 'TOM', 'age': 18, 'id': 110}
# dict1= {'name': 'TOM', 'age': 18, 'id': 110} # 提前定义字典
# user_info(**dict1) # 传入字典必须带**



# 交换变量
# a,b=b,a



# 可变类型
# 列表、字典、集合
# 不可变类型
# 整型、浮点型、字符串、元组
